package com.mfangsoft.zhuangjialong.common.utils;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import com.mfangsoft.zhuangjialong.common.controller.FileUploadController;

public  class FileUtils {

	public static void removeFile(String fileName){
		File file = new File(fileName);
        if (!file.exists()) {
            System.out.println("删除文件失败:" + fileName + "不存在！");
        } else {
            if (file.isFile())
                 deleteFile(fileName);
            else
                 deleteDirectory(fileName);
        }
	}
    
	   /**
     * 删除单个文件
     *
     * @param fileName
     *            要删除的文件的文件名
     * @return 单个文件删除成功返回true，否则返回false
     */
    public static boolean deleteFile(String fileName) {
        File file = new File(fileName);
        // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                System.out.println("删除单个文件" + fileName + "成功！");
                return true;
            } else {
                System.out.println("删除单个文件" + fileName + "失败！");
                return false;
            }
        } else {
            System.out.println("删除单个文件失败：" + fileName + "不存在！");
            return false;
        }
    }
    
    /**
     * 删除目录及目录下的文件
     *
     * @param dir
     *            要删除的目录的文件路径
     * @return 目录删除成功返回true，否则返回false
     */
    public static boolean deleteDirectory(String dir) {
        // 如果dir不以文件分隔符结尾，自动添加文件分隔符
        if (!dir.endsWith(File.separator))
            dir = dir + File.separator;
        File dirFile = new File(dir);
        // 如果dir对应的文件不存在，或者不是一个目录，则退出
        if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
            System.out.println("删除目录失败：" + dir + "不存在！");
            return false;
        }
        boolean flag = true;
        // 删除文件夹中的所有文件包括子目录
        File[] files = dirFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            // 删除子文件
            if (files[i].isFile()) {
                flag = FileUtils.deleteFile(files[i].getAbsolutePath());
                if (!flag)
                    break;
            }
            // 删除子目录
            else if (files[i].isDirectory()) {
                flag = FileUtils.deleteDirectory(files[i]
                        .getAbsolutePath());
                if (!flag)
                    break;
            }
        }
        if (!flag) {
            System.out.println("删除目录失败！");
            return false;
        }
        // 删除当前目录
        if (dirFile.delete()) {
            System.out.println("删除目录" + dir + "成功！");
            return true;
        } else {
            return false;
        }
    }
    
    public static String compress(List<String> filePaths) {
    	byte[] buffer = new byte[1024];  
   	 
        //生成的ZIP文件名为Demo.zip  
  
        java.text.SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
        String format = f.format(new Date());
        String path = PropUtis.getValue(PropUtis.FILE_PATH) + "/QR/zip/" + format;
        File filepath = new File(path);
		if (!filepath.exists()) {

			filepath.mkdirs();
		}
		Long time =System.currentTimeMillis();
		String filePath = null;
		ByteArrayOutputStream bos = null;
	   	 BufferedInputStream in=null; 
		try {
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(filepath.getPath() + "/" + time + ".zip"));
  
        //需要同时下载的两个文件result.txt ，source.txt  
  
      List<File> files = new ArrayList<>();
      for (String file : filePaths) {
    	  files.add(new File(file));
	}
  
        for(int i=0;i<files.size();i++) {  
  
            FileInputStream fis = new FileInputStream(files.get(i));  
  
            out.putNextEntry(new ZipEntry(files.get(i).getName()));  
  
            int len;  
  
            //读入需要下载的文件的内容，打包到zip文件  
  
           while((len = fis.read(buffer))>0) {  
  
            out.write(buffer,0,len);   
  
           }  
  
            out.closeEntry();  
  
            fis.close();  
  
        }  
  
         out.close();  
         File file = new File(filepath.getPath() + "/" + time + ".zip");
         bos=new ByteArrayOutputStream((int)file.length());  
         in=new BufferedInputStream(new FileInputStream(file));  
         int buf_size=1024;  
         byte[] buffers=new byte[buf_size];  
         int len=0;  
         while(-1 != (len=in.read(buffers,0,buf_size))){  
             bos.write(buffers,0,len);  
         }  
         FileUploadController.httpClientUploadFileBase64(bos.toByteArray(),  path, time + ".zip");
         filePath = PropUtis.getValue(PropUtis.FILE_URL) + "/QR/zip/" + format + "/" + time + ".zip";
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return filePath;
    }
    

}